#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
标签页组件示例程序
"""
import sys
import os

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
                            QHBoxLayout, QPushButton, QLabel, QComboBox,
                            QCheckBox, QSpinBox, QGroupBox, QScrollArea,
                            QTextEdit, QLineEdit, QRadioButton, QColorDialog)

from component import Tabs, Theme, Card, VBox, HBox, Input, Button


class MainWindow(QMainWindow):
    """主窗口"""
    def __init__(self):
        super().__init__()
        self.setWindowTitle("标签页组件示例")
        self.resize(800, 600)
        
        # 创建中央部件
        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        
        # 创建主布局
        main_layout = QVBoxLayout(central_widget)
        
        # 创建滚动区域
        scroll_area = QScrollArea()
        scroll_area.setWidgetResizable(True)
        scroll_content = QWidget()
        scroll_layout = QVBoxLayout(scroll_content)
        scroll_layout.setAlignment(Qt.AlignTop)
        scroll_area.setWidget(scroll_content)
        main_layout.addWidget(scroll_area)
        
        # 添加基本标签页示例
        self._add_basic_tabs_example(scroll_layout)
        
        # 添加底部标签页示例
        self._add_bottom_tabs_example(scroll_layout)
        
        # 添加不可关闭标签页示例
        self._add_non_closable_tabs_example(scroll_layout)
        
        # 添加拉伸标签页示例
        self._add_stretch_tabs_example(scroll_layout)
        
        # 添加自定义标签页示例
        self._add_custom_tabs_example(scroll_layout)
        
        # 添加动态标签页示例
        self._add_dynamic_tabs_example(scroll_layout)
    
    def _add_basic_tabs_example(self, parent_layout):
        """添加基本标签页示例"""
        # 创建卡片
        card = Card("基本标签页")
        
        # 创建垂直布局
        vbox = VBox(margin=10, spacing=20)
        
        # 创建标签页组件
        tabs = Tabs()
        
        # 创建标签页内容
        tab1_content = QWidget()
        tab1_layout = QVBoxLayout(tab1_content)
        tab1_layout.addWidget(QLabel("这是第一个标签页的内容"))
        tab1_layout.addWidget(QTextEdit("这是一个文本编辑器"))
        
        tab2_content = QWidget()
        tab2_layout = QVBoxLayout(tab2_content)
        tab2_layout.addWidget(QLabel("这是第二个标签页的内容"))
        tab2_layout.addWidget(QPushButton("点击我"))
        
        tab3_content = QWidget()
        tab3_layout = QVBoxLayout(tab3_content)
        tab3_layout.addWidget(QLabel("这是第三个标签页的内容"))
        tab3_layout.addWidget(QLineEdit("这是一个输入框"))
        
        # 添加标签页
        tabs.add_tab("标签页 1", tab1_content)
        tabs.add_tab("标签页 2", tab2_content)
        tabs.add_tab("标签页 3", tab3_content)
        
        # 添加到布局
        vbox.add_widget(QLabel("基本标签页示例"))
        vbox.add_widget(tabs)
        
        # 添加到卡片
        card.add_widget(vbox)
        
        # 添加到父布局
        parent_layout.addWidget(card)
    
    def _add_bottom_tabs_example(self, parent_layout):
        """添加底部标签页示例"""
        # 创建卡片
        card = Card("底部标签页")
        
        # 创建垂直布局
        vbox = VBox(margin=10, spacing=20)
        
        # 创建标签页组件
        tabs = Tabs(tab_position="bottom")
        
        # 创建标签页内容
        tab1_content = QWidget()
        tab1_layout = QVBoxLayout(tab1_content)
        tab1_layout.addWidget(QLabel("这是第一个标签页的内容"))
        tab1_layout.addWidget(QTextEdit("这是一个文本编辑器"))
        
        tab2_content = QWidget()
        tab2_layout = QVBoxLayout(tab2_content)
        tab2_layout.addWidget(QLabel("这是第二个标签页的内容"))
        tab2_layout.addWidget(QPushButton("点击我"))
        
        # 添加标签页
        tabs.add_tab("标签页 1", tab1_content)
        tabs.add_tab("标签页 2", tab2_content)
        
        # 添加到布局
        vbox.add_widget(QLabel("底部标签页示例"))
        vbox.add_widget(tabs)
        
        # 添加到卡片
        card.add_widget(vbox)
        
        # 添加到父布局
        parent_layout.addWidget(card)
    
    def _add_non_closable_tabs_example(self, parent_layout):
        """添加不可关闭标签页示例"""
        # 创建卡片
        card = Card("不可关闭标签页")
        
        # 创建垂直布局
        vbox = VBox(margin=10, spacing=20)
        
        # 创建标签页组件
        tabs = Tabs(closable=False)
        
        # 创建标签页内容
        tab1_content = QWidget()
        tab1_layout = QVBoxLayout(tab1_content)
        tab1_layout.addWidget(QLabel("这是第一个标签页的内容"))
        tab1_layout.addWidget(QTextEdit("这是一个文本编辑器"))
        
        tab2_content = QWidget()
        tab2_layout = QVBoxLayout(tab2_content)
        tab2_layout.addWidget(QLabel("这是第二个标签页的内容"))
        tab2_layout.addWidget(QPushButton("点击我"))
        
        tab3_content = QWidget()
        tab3_layout = QVBoxLayout(tab3_content)
        tab3_layout.addWidget(QLabel("这是第三个标签页的内容"))
        tab3_layout.addWidget(QLineEdit("这是一个输入框"))
        
        # 添加标签页
        tabs.add_tab("标签页 1", tab1_content)
        tabs.add_tab("标签页 2", tab2_content)
        tabs.add_tab("标签页 3", tab3_content, closable=True)  # 单独设置为可关闭
        
        # 添加到布局
        vbox.add_widget(QLabel("不可关闭标签页示例（第三个标签页可关闭）"))
        vbox.add_widget(tabs)
        
        # 添加到卡片
        card.add_widget(vbox)
        
        # 添加到父布局
        parent_layout.addWidget(card)
    
    def _add_stretch_tabs_example(self, parent_layout):
        """添加拉伸标签页示例"""
        # 创建卡片
        card = Card("拉伸标签页")
        
        # 创建垂直布局
        vbox = VBox(margin=10, spacing=20)
        
        # 创建标签页组件
        tabs = Tabs(stretch_tabs=True)
        
        # 创建标签页内容
        tab1_content = QWidget()
        tab1_layout = QVBoxLayout(tab1_content)
        tab1_layout.addWidget(QLabel("这是第一个标签页的内容"))
        tab1_layout.addWidget(QTextEdit("这是一个文本编辑器"))
        
        tab2_content = QWidget()
        tab2_layout = QVBoxLayout(tab2_content)
        tab2_layout.addWidget(QLabel("这是第二个标签页的内容"))
        tab2_layout.addWidget(QPushButton("点击我"))
        
        tab3_content = QWidget()
        tab3_layout = QVBoxLayout(tab3_content)
        tab3_layout.addWidget(QLabel("这是第三个标签页的内容"))
        tab3_layout.addWidget(QLineEdit("这是一个输入框"))
        
        # 添加标签页
        tabs.add_tab("标签页 1", tab1_content)
        tabs.add_tab("标签页 2", tab2_content)
        tabs.add_tab("标签页 3", tab3_content)
        
        # 添加到布局
        vbox.add_widget(QLabel("拉伸标签页示例"))
        vbox.add_widget(tabs)
        
        # 添加到卡片
        card.add_widget(vbox)
        
        # 添加到父布局
        parent_layout.addWidget(card)
    
    def _add_custom_tabs_example(self, parent_layout):
        """添加自定义标签页示例"""
        # 创建卡片
        card = Card("自定义标签页")
        
        # 创建垂直布局
        vbox = VBox(margin=10, spacing=20)
        
        # 创建标签页组件
        tabs = Tabs(active_color="#FF5722")  # 自定义激活颜色
        
        # 创建标签页内容
        tab1_content = QWidget()
        tab1_layout = QVBoxLayout(tab1_content)
        tab1_layout.addWidget(QLabel("这是第一个标签页的内容"))
        tab1_layout.addWidget(QTextEdit("这是一个文本编辑器"))
        
        tab2_content = QWidget()
        tab2_layout = QVBoxLayout(tab2_content)
        tab2_layout.addWidget(QLabel("这是第二个标签页的内容"))
        tab2_layout.addWidget(QPushButton("点击我"))
        
        # 添加标签页
        tabs.add_tab("标签页 1", tab1_content)
        tabs.add_tab("标签页 2", tab2_content)
        
        # 添加到布局
        vbox.add_widget(QLabel("自定义标签页示例（自定义激活颜色）"))
        vbox.add_widget(tabs)
        
        # 添加到卡片
        card.add_widget(vbox)
        
        # 添加到父布局
        parent_layout.addWidget(card)
    
    def _add_dynamic_tabs_example(self, parent_layout):
        """添加动态标签页示例"""
        # 创建卡片
        card = Card("动态标签页")
        
        # 创建垂直布局
        vbox = VBox(margin=10, spacing=20)
        
        # 创建标签页组件
        self.dynamic_tabs = Tabs()
        
        # 创建标签页内容
        tab1_content = QWidget()
        tab1_layout = QVBoxLayout(tab1_content)
        tab1_layout.addWidget(QLabel("这是第一个标签页的内容"))
        
        # 添加标签页
        self.dynamic_tabs.add_tab("标签页 1", tab1_content)
        
        # 创建控制面板
        control_group = QGroupBox("控制面板")
        control_layout = QVBoxLayout(control_group)
        
        # 添加标签页
        add_layout = QHBoxLayout()
        add_layout.addWidget(QLabel("标签标题:"))
        self.tab_title_input = QLineEdit("新标签页")
        add_layout.addWidget(self.tab_title_input)
        
        self.add_button = QPushButton("添加标签页")
        self.add_button.clicked.connect(self._add_dynamic_tab)
        add_layout.addWidget(self.add_button)
        
        control_layout.addLayout(add_layout)
        
        # 移除标签页
        remove_layout = QHBoxLayout()
        remove_layout.addWidget(QLabel("标签索引:"))
        self.tab_index_spin = QSpinBox()
        self.tab_index_spin.setMinimum(0)
        self.tab_index_spin.setMaximum(0)
        remove_layout.addWidget(self.tab_index_spin)
        
        self.remove_button = QPushButton("移除标签页")
        self.remove_button.clicked.connect(self._remove_dynamic_tab)
        remove_layout.addWidget(self.remove_button)
        
        control_layout.addLayout(remove_layout)
        
        # 标签位置
        position_layout = QHBoxLayout()
        position_layout.addWidget(QLabel("标签位置:"))
        self.position_combo = QComboBox()
        self.position_combo.addItems(["top", "bottom"])
        self.position_combo.currentTextChanged.connect(self._change_tab_position)
        position_layout.addWidget(self.position_combo)
        
        control_layout.addLayout(position_layout)
        
        # 拉伸标签
        stretch_layout = QHBoxLayout()
        self.stretch_check = QCheckBox("拉伸标签")
        self.stretch_check.stateChanged.connect(self._toggle_stretch_tabs)
        stretch_layout.addWidget(self.stretch_check)
        
        control_layout.addLayout(stretch_layout)
        
        # 添加到布局
        vbox.add_widget(QLabel("动态标签页示例"))
        vbox.add_widget(self.dynamic_tabs)
        vbox.add_widget(control_group)
        
        # 添加到卡片
        card.add_widget(vbox)
        
        # 添加到父布局
        parent_layout.addWidget(card)
        
        # 连接信号
        self.dynamic_tabs.tab_changed.connect(self._on_tab_changed)
        self.dynamic_tabs.tab_closed.connect(self._on_tab_closed)
    
    def _add_dynamic_tab(self):
        """添加动态标签页"""
        title = self.tab_title_input.text()
        if not title:
            title = f"标签页 {self.dynamic_tabs.get_count() + 1}"
        
        # 创建标签页内容
        content = QWidget()
        layout = QVBoxLayout(content)
        layout.addWidget(QLabel(f"这是标签页 '{title}' 的内容"))
        layout.addWidget(QTextEdit(f"这是标签页 '{title}' 的文本编辑器"))
        
        # 添加标签页
        self.dynamic_tabs.add_tab(title, content)
        
        # 更新索引范围
        self.tab_index_spin.setMaximum(self.dynamic_tabs.get_count() - 1)
    
    def _remove_dynamic_tab(self):
        """移除动态标签页"""
        index = self.tab_index_spin.value()
        self.dynamic_tabs.remove_tab(index)
        
        # 更新索引范围
        self.tab_index_spin.setMaximum(max(0, self.dynamic_tabs.get_count() - 1))
    
    def _change_tab_position(self, position):
        """改变标签位置"""
        self.dynamic_tabs.set_tab_position(position)
    
    def _toggle_stretch_tabs(self, state):
        """切换拉伸标签"""
        self.dynamic_tabs.set_stretch_tabs(state == Qt.Checked)
    
    def _on_tab_changed(self, index):
        """标签页改变事件"""
        print(f"标签页改变: {index}")
        
        # 更新索引
        self.tab_index_spin.setValue(index)
    
    def _on_tab_closed(self, index):
        """标签页关闭事件"""
        print(f"标签页关闭: {index}")
        
        # 更新索引范围
        self.tab_index_spin.setMaximum(max(0, self.dynamic_tabs.get_count() - 1))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    
    # 应用主题
    Theme.apply_theme(app)
    
    window = MainWindow()
    window.show()
    
    sys.exit(app.exec_()) 